import request from "@/utils/request";

const WAVE_CHART_BASE_URL = "/api/wave_file";
const WAVE_RECORD_BASE_URL = "/api/wave_record";
const WAVE_BACKUP_BASE_URL = "/api/wave_backup";

/**
 * 波形图数据API
 */
export const WaveChartAPI = {
  /**
   * 获取波形数据
   * @param cpu CPU编号
   * @param faultFileName 故障文件名
   */
  fetchWaveData: (cpu: number, type: number, faultFileName: string) => {
    return request<any, any>({
      url: `${WAVE_CHART_BASE_URL}/${cpu}/${type}/${faultFileName}`,
      method: "get",
      responseType: "arraybuffer", // 直接获取二进制数据
    });
  },

  /**
   * 手动录波
   * @param cpu CPU 编号
   * @param payload 录波参数数组（接口要求数组形式）
   */
  manualWaveRecord: (cpu: number, payload: WaveRecordPayload) => {
    return request<WaveRecordPayload, WaveRecordResponse>({
      url: `${WAVE_RECORD_BASE_URL}/${cpu}`,
      method: "post",
      data: payload,
    });
  },

  /**
   * 查询录波备份信息
   * @param cpu CPU 编号
   * @returns 形如 [{ fault_cnt: number, last_id: number }]
   */
  fetchWaveBackupInfo: (cpu: number) => {
    return request<any, WaveBackupInfoResponse>({
      url: `${WAVE_BACKUP_BASE_URL}/${cpu}`,
      method: "get",
    });
  },

  /**
   * 触发录波备份
   * @param cpu CPU 编号
   * @returns { cpu: number, success: 1|0 }
   */
  triggerWaveBackup: (cpu: number) => {
    return request<null, WaveBackupActionResponse>({
      url: `${WAVE_BACKUP_BASE_URL}/${cpu}`,
      method: "post",
      data: null,
    });
  },
};

/**
 * 波形数据响应
 */
export interface WaveCfg {
  /** 模拟量通道数据 */
  analogChannels: WaveAnalogChannel[];
  /** 数字量通道数据 */
  digitalChannels: WaveDigitalChannel[];
  /** 时间基准数据 (微秒) */
  timeBaseus: number[];
  /** 模拟量采样数据 */
  analogSamples: number[][];
  /** 数字量采样数据 */
  digitalSamples: number[][];
}

/**
 * 模拟量通道
 */
export interface WaveAnalogChannel {
  /** 通道ID */
  id: string;
  /** 通道名称 */
  name: string;
  /** 单位 */
  unit: string;
  /** 相位 */
  phase: string;
  /** 索引 */
  index: number;
}

/**
 * 数字量通道
 */
export interface WaveDigitalChannel {
  /** 通道ID */
  id: string;
  /** 通道名称 */
  name: string;
  /** 相位 */
  phase: string;
  /** 索引 */
  index: number;
}

/** 手动录波请求项 */
export interface WaveRecordConfig {
  /** 录波间隔，单位与后端约定一致 */
  interval: number;
  /** 录波最大长度 */
  wavelen: number;
}

/** 手动录波请求负载（接口为数组形式） */
export type WaveRecordPayload = WaveRecordConfig[];

/** 手动录波响应 */
export interface WaveRecordResponse {
  cpu: number;
  status: string; // "Success" | 其他状态描述
}

/** 录波备份信息项 */
export interface WaveBackupInfoItem {
  /** 录波文件数量 */
  fault_cnt: number;
  /** 最新录波文件 ID */
  last_id: number;
}

/** 录波备份信息响应（数组形式，仅取第一项） */
export type WaveBackupInfoResponse = WaveBackupInfoItem[];

/** 录波备份触发响应 */
export interface WaveBackupActionResponse {
  cpu: number;
  /** 成功：1；失败：0 */
  success: number;
}
